Skip to content

Implement heterogeneous Association Map based on SoA blocks - #49995

Merged
cmsbuild merged 3 commits into
cms-sw:masterfrom
sbaldu:feature/heterogeneous-associator
Aug 25, 2026
Merged

Implement heterogeneous Association Map based on SoA blocks#49995
cmsbuild merged 3 commits into
cms-sw:masterfrom
sbaldu:feature/heterogeneous-associator

Conversation

@sbaldu

@sbaldu sbaldu commented Feb 1, 2026

Copy link
Copy Markdown
Contributor

PR description:

This PR implements an association map based on SoA blocks. In order to provide the accessors to the map's properties and content, the PR also enables the definition of SoA view methods.

PR validation:

The PR includes a test of the construction and fill of the map and checks the correctness of the content and the accessor methods.

FYI @felicepantaleo

@cmsbuild

cmsbuild commented Feb 1, 2026

Copy link
Copy Markdown
Contributor

cms-bot internal usage

@cmsbuild

cmsbuild commented Feb 1, 2026

Copy link
Copy Markdown
Contributor

@cmsbuild

cmsbuild commented Feb 1, 2026

Copy link
Copy Markdown
Contributor

A new Pull Request was created by @sbaldu for master.

It involves the following packages:

  • DataFormats/AssociationMap (****)
  • DataFormats/SoATemplate (heterogeneous)

The following packages do not have a category, yet:

DataFormats/AssociationMap
Please create a PR for https://github.com/cms-sw/cms-bot/blob/master/categories_map.py to assign category

@cmsbuild, @fwyzard, @makortel can you please review it and eventually sign? Thanks.
@missirol, @mmusich, @rovere this is something you requested to watch as well.
@ftenchini, @mandrenguyen, @sextonkennedy you are the release manager for this.

cms-bot commands are listed here

@fwyzard

fwyzard commented Feb 2, 2026

Copy link
Copy Markdown
Contributor

type ngt

@cmsbuild cmsbuild added the ngt label Feb 2, 2026
Comment thread DataFormats/TICL/BuildFile.xml
Comment thread DataFormats/AssociationMap/interface/AssociationMap.h Outdated
#include <cstdint>
#include <type_traits>

namespace ticl {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this utility specific to TICL or intended for more general usage?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As of now the main usage is TICL

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be feasible to include this code in a package that already uses TICL?

Or, the motivation to place this code in its own package is not clear.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the suggestion. I've now put the map under a new DataFormats/TICL package

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With @felicepantaleo we decided to add a new package for TICL data formats and we'll start moving the structures specific for TICL there

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With @felicepantaleo we decided to add a new package for TICL data formats and we'll start moving the structures specific for TICL there

Ok. I guess at least @cms-sw/reconstruction-l2 should sign it? What about @cms-sw/heterogeneous-l2?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about @cms-sw/heterogeneous-l2?

This too, I guess 🤷🏻‍♂️

Comment thread DataFormats/AssociationMap/interface/FillAssociator.h Outdated
Comment thread DataFormats/AssociationMap/interface/detail/FillAssociator.h Outdated
Comment thread DataFormats/AssociationMap/interface/FillAssociator.h Outdated
@cmsbuild

cmsbuild commented Feb 2, 2026

Copy link
Copy Markdown
Contributor

@cmsbuild

cmsbuild commented Feb 2, 2026

Copy link
Copy Markdown
Contributor

Pull request #49995 was updated. @cmsbuild, @fwyzard, @makortel can you please check and sign again.

Comment thread DataFormats/AssociationMap/interface/FillAssociator.h Outdated
Comment thread DataFormats/AssociationMap/interface/FillAssociator.h Outdated
@cmsbuild

cmsbuild commented Feb 3, 2026

Copy link
Copy Markdown
Contributor

@cmsbuild

cmsbuild commented Feb 3, 2026

Copy link
Copy Markdown
Contributor

Pull request #49995 was updated. @cmsbuild, @fwyzard, @makortel can you please check and sign again.

Comment thread DataFormats/TICL/test/alpaka/TestAssociationMap.dev.cc Outdated
@cmsbuild

Copy link
Copy Markdown
Contributor

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-49995/50673

@cmsbuild

Copy link
Copy Markdown
Contributor

Pull request #49995 was updated. @Moanwar, @cmsbuild, @fwyzard, @jfernan2, @makortel, @mandrenguyen, @srimanob can you please check and sign again.

Comment thread DataFormats/TICL/interface/detail/FillAssociator.h

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add or modify the tests to check some more cases:

  • the map is not completely full (can it happen for the keys, or only for the values ?)

  • the map is exactly full (I think all current tests assume this)

  • the keys overflow (should assert ?)

  • the values overflow (should assert ?)

  • the number of keys is 30

  • the number of keys is 31 (so n+1 is 32 which is on the alignment boundary)

  • the number of keys is 32

  • different keys have different number of elements

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the effort to increase the robustness of the tests I would also opt to add a ROOT streamer test that stores and reads a map. There we rely on the interplay between SoABlocks and the layouts it contains. Everything is correct as it is but we should make sure that future developements don't destroy anything here. Especially, since we plan to support RNTuple soon things might change and I think it will be important to test that these changes don't affect anything that is developed in this PR

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have written a test case for this a while ago here. I think it just needs to be added to right place in this PR if found useful

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added the required tests

@cmsbuild

Copy link
Copy Markdown
Contributor

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-49995/50674

@cmsbuild

Copy link
Copy Markdown
Contributor

Pull request #49995 was updated. @Moanwar, @cmsbuild, @fwyzard, @jfernan2, @makortel, @mandrenguyen, @srimanob can you please check and sign again.

@cmsbuild

Copy link
Copy Markdown
Contributor

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-49995/50675

@cmsbuild

Copy link
Copy Markdown
Contributor

Pull request #49995 was updated. @Moanwar, @cmsbuild, @fwyzard, @jfernan2, @makortel, @mandrenguyen, @srimanob can you please check and sign again.

@fwyzard

fwyzard commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

I am lost among the discussion in #49995 (comment) and #49995 (comment) .

I agree with @Parsifal-2045 that having an potentially public inconsistent interface is Bad.

I understand that we need nkeys + 1 entries in the buffer.
(well, maybe not, maybe we could rely on the fact that the first offset is always 0 and store one less offset? but the code would be come more complicated and somewhat less efficient).

I would like to understand what code would produce inconsistent results, and discuss how to address the issue.

@sbaldu

sbaldu commented Aug 21, 2026

Copy link
Copy Markdown
Contributor Author

I think that fixing the previous off-by-one issues has introduced some new unwanted behaviour (that escaped the current testing). Now the OffsetsLayout correctly stores the requested nkeys + 1 so that the count() method works as expected, then AssociationMap just returns size() - 1 to compensate (AssociationMap.h:62-64). The issue is that now the number passed by the caller and what the block holds are different and the value stored in the SoABlocks depends on which constructor was used:

  • The constructor relying on the user-provided layout (link) copies what the caller passed to the constructor (let's say nkeys)
  • The constructor using per-block views asks each view how many elements it actually contains (which would be nkeys + 1).

The override of the SoABlocks sizes in AssociationMap makes the two disagree so that building a map with nkeys = 2 one would get:

  • map.view().metadata().size()[1] == 2
  • map.view().offsets().metadata().size() == 3
  • AssociationMap<>::const_cast_View(map.const_view()).metadata().size()[1] == 3
    which can be easily checked via something like
CHECK( map.view().metadata().size()[1] == map.view().offsets().metadata().size() )

I think this "disagreement" might have multiple repercussions (e.g. probably in the deepCopy check) so I would suggest to drop the OffsetsLayout override, prefer building always with nkeys + 1 and having keys() stay size() - 1 for consistent size reporting. Note that dropping the override would most likely need to go together with #49995 (comment) to not break fill()

@Parsifal-2045 @fwyzard
Looking at SoaBlocks.h the behaviour with const_vast_View is due to the fact that for block SoAs it's defined like this (SoABlocks.h lines 604-610):

/* Helper to implement View as derived from ConstView in SoABlocks implementation */                              
template <bool RESTRICT_QUALIFY, cms::soa::RangeChecking::Mode RANGE_CHECKING>                                    
SOA_HOST_DEVICE SOA_INLINE static ViewTemplate<RESTRICT_QUALIFY, RANGE_CHECKING> const_cast_View(                  
  ConstViewTemplate<RESTRICT_QUALIFY, RANGE_CHECKING> const& view)  {                                             
    return ViewTemplate<RESTRICT_QUALIFY, RANGE_CHECKING>{                                                          
      _ITERATE_ON_ALL_COMMA(_DECLARE_CONST_CAST_VIEWS, ~, __VA_ARGS__)};                                             
}    

which then calls const_cast_View for each of the views singularly (SoABlocks.h lines 140-141):

#define _DECLARE_CONST_CAST_VIEWS_IMPL(VALUE_TYPE, NAME, LAYOUT_NAME)
  (LayoutFor<LAYOUT_NAME>::const_cast_View(view.NAME()))

@cmsbuild

Copy link
Copy Markdown
Contributor

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-49995/50688

@cmsbuild

Copy link
Copy Markdown
Contributor

Pull request #49995 was updated. @Moanwar, @cmsbuild, @fwyzard, @jfernan2, @makortel, @mandrenguyen, @srimanob can you please check and sign again.

@fwyzard

fwyzard commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

please test

@cmsbuild

Copy link
Copy Markdown
Contributor

-1

Failed Tests: UnitTests
Size: This PR adds an extra 16KB to repository
Summary: https://cmssdt.cern.ch/SDT/jenkins-artifacts/pull-request-integration/PR-9aee20/55513/summary.html
COMMIT: e9eff97
CMSSW: CMSSW_20_1_X_2026-08-23-2300/el9_amd64_gcc14
Additional Tests: GPU,AMD_MI300X,AMD_W7900,NVIDIA_H100,NVIDIA_L40S,NVIDIA_T4
User test area: For local testing, you can use /cvmfs/cms-ci.cern.ch/week0/cms-sw/cmssw/49995/55513/install.sh to create a dev area with all the needed externals and cmssw changes.

Failed Unit Tests

I found 1 errors in the following unit tests:

---> test testMakeHGCalValidationPlots had ERRORS

Comparison Summary

Summary:

  • You potentially added 1 lines to the logs
  • Reco comparison results: 4 differences found in the comparisons
  • DQMHistoTests: Total files compared: 45
  • DQMHistoTests: Total histograms compared: 3592269
  • DQMHistoTests: Total failures: 18
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 3592233
  • DQMHistoTests: Total skipped: 18
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 44 files compared)
  • Checked 195 log files, 163 edm output root files, 45 DQM output files
  • TriggerResults: no differences found

AMD_MI300X Comparison Summary

Summary:

  • No significant changes to the logs found
  • Reco comparison results: 60 differences found in the comparisons
  • DQMHistoTests: Total files compared: 7
  • DQMHistoTests: Total histograms compared: 173739
  • DQMHistoTests: Total failures: 8970
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 164769
  • DQMHistoTests: Total skipped: 0
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 6 files compared)
  • Checked 25 log files, 20 edm output root files, 7 DQM output files
  • TriggerResults: no differences found

AMD_W7900 Comparison Summary

Summary:

  • No significant changes to the logs found
  • Reco comparison results: 50 differences found in the comparisons
  • DQMHistoTests: Total files compared: 7
  • DQMHistoTests: Total histograms compared: 173739
  • DQMHistoTests: Total failures: 8490
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 165249
  • DQMHistoTests: Total skipped: 0
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 6 files compared)
  • Checked 25 log files, 20 edm output root files, 7 DQM output files
  • TriggerResults: no differences found

NVIDIA_H100 Comparison Summary

Summary:

  • No significant changes to the logs found
  • Reco comparison results: 75 differences found in the comparisons
  • DQMHistoTests: Total files compared: 7
  • DQMHistoTests: Total histograms compared: 173739
  • DQMHistoTests: Total failures: 8776
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 164963
  • DQMHistoTests: Total skipped: 0
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 6 files compared)
  • Checked 25 log files, 20 edm output root files, 7 DQM output files
  • TriggerResults: no differences found

NVIDIA_L40S Comparison Summary

Summary:

  • No significant changes to the logs found
  • Reco comparison results: 66 differences found in the comparisons
  • DQMHistoTests: Total files compared: 7
  • DQMHistoTests: Total histograms compared: 173739
  • DQMHistoTests: Total failures: 7666
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 166073
  • DQMHistoTests: Total skipped: 0
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 6 files compared)
  • Checked 25 log files, 20 edm output root files, 7 DQM output files
  • TriggerResults: no differences found

NVIDIA_T4 Comparison Summary

Summary:

  • No significant changes to the logs found
  • Reco comparison results: 100 differences found in the comparisons
  • DQMHistoTests: Total files compared: 7
  • DQMHistoTests: Total histograms compared: 173739
  • DQMHistoTests: Total failures: 9066
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 164673
  • DQMHistoTests: Total skipped: 0
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 6 files compared)
  • Checked 25 log files, 20 edm output root files, 7 DQM output files
  • TriggerResults: no differences found

@fwyzard

fwyzard commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

---> test testMakeHGCalValidationPlots had ERRORS

I assume the error

----- Begin Fatal Exception 24-Aug-2026 09:40:39 CEST-----------------------
An exception of category 'FileOpenError' occurred while
   [0] Calling InputSource::readFile_
   [1] Opening DQM Root file
   [2] Calling StorageFactory::open()
   [3] Calling XrdFile::open()
Exception Message:
Failed to open the file 'root://xrootd-cms.infn.it//store/relval/CMSSW_15_1_0/RelValTTbar_14TeV/DQMIO/150X_mcRun4_realistic_v1_STD_RecycledGS_Run4D110_noPU-v2/2580000/A15356AB-757E-4C84-B709-24BEA9C71471.root?scitag.flow=206'
Input file root://xrootd-cms.infn.it//store/relval/CMSSW_15_1_0/RelValTTbar_14TeV/DQMIO/150X_mcRun4_realistic_v1_STD_RecycledGS_Run4D110_noPU-v2/2580000/A15356AB-757E-4C84-B709-24BEA9C71471.root?scitag.flow=206 was not found, could not be opened, or is corrupted.
   Additional Info:
      [a] XrdCl::File::Open(name='root://cms-xrd-global.cern.ch//eos/cms/store/relval/CMSSW_15_1_0/RelValTTbar_14TeV/DQMIO/150X_mcRun4_realistic_v1_STD_RecycledGS_Run4D110_noPU-v2/2580000/A15356AB-757E-4C84-B709-24BEA9C71471.root?scitag.flow=206', flags=0x10, permissions=0660) => error '[ERROR] Server responded with an error: [3011] No servers are available to read the file.
' (errno=3011, code=400). No additional data servers were found.
      [b] Last URL tried: root://cms-xrd-global.cern.ch:1094//eos/cms/store/relval/CMSSW_15_1_0/RelValTTbar_14TeV/DQMIO/150X_mcRun4_realistic_v1_STD_RecycledGS_Run4D110_noPU-v2/2580000/A15356AB-757E-4C84-B709-24BEA9C71471.root?scitag.flow=206&xrdcl.requuid=6ad7f68e-b5f6-49b7-9bfa-c15a55984e88
      [c] Problematic data server: cms-xrd-global.cern.ch:1094
      [d] Disabled source: cms-xrd-global.cern.ch:1094
      [e] XrdCl::File::Open(name='root://eoscms.cern.ch//eos/cms/store/user/cmsbuild/store/relval/CMSSW_15_1_0/RelValTTbar_14TeV/DQMIO/150X_mcRun4_realistic_v1_STD_RecycledGS_Run4D110_noPU-v2/2580000/A15356AB-757E-4C84-B709-24BEA9C71471.root?scitag.flow=206', flags=0x10, permissions=0660) => error '[ERROR] Server responded with an error: [3011] Unable to open file /eos/cms/store/user/cmsbuild/store/relval/CMSSW_15_1_0/RelValTTbar_14TeV/DQMIO/150X_mcRun4_realistic_v1_STD_RecycledGS_Run4D110_noPU-v2/2580000/A15356AB-757E-4C84-B709-24BEA9C71471.root; No such file or directory
' (errno=3011, code=400). No additional data servers were found.
      [f] Last URL tried: root://eoscms.cern.ch:1094//eos/cms/store/user/cmsbuild/store/relval/CMSSW_15_1_0/RelValTTbar_14TeV/DQMIO/150X_mcRun4_realistic_v1_STD_RecycledGS_Run4D110_noPU-v2/2580000/A15356AB-757E-4C84-B709-24BEA9C71471.root?scitag.flow=206&xrdcl.requuid=5efc6f2c-6068-49bf-9b01-1cb81b34e4c9
      [g] Problematic data server: eoscms.cern.ch:1094
      [h] Disabled source: eoscms.cern.ch:1094
      [i] XrdCl::File::Open(name='root://xrootd-cms.infn.it//store/relval/CMSSW_15_1_0/RelValTTbar_14TeV/DQMIO/150X_mcRun4_realistic_v1_STD_RecycledGS_Run4D110_noPU-v2/2580000/A15356AB-757E-4C84-B709-24BEA9C71471.root?scitag.flow=206', flags=0x10, permissions=0660) => error '[ERROR] Server responded with an error: [3010] Access denied: /pnfs/ciemat.es/data/cms/prod/store/relval/CMSSW_15_1_0/RelValTTbar_14TeV/DQMIO/150X_mcRun4_realistic_v1_STD_RecycledGS_Run4D110_noPU-v2/2580000/A15356AB-757E-4C84-B709-24BEA9C71471.root
' (errno=3010, code=400). No additional data servers were found.
      [j] Last URL tried: root://gaexrdoor.ciemat.es:1094//store/relval/CMSSW_15_1_0/RelValTTbar_14TeV/DQMIO/150X_mcRun4_realistic_v1_STD_RecycledGS_Run4D110_noPU-v2/2580000/A15356AB-757E-4C84-B709-24BEA9C71471.root?scitag.flow=206&xrdcl.requuid=d1a4ab2b-efff-4632-9d25-9d07363bfaf4
      [k] Problematic data server: gaexrdoor.ciemat.es:1094
      [l] Disabled source: gaexrdoor.ciemat.es:1094
----- End Fatal Exception -------------------------------------------------

is unrelated.

@fwyzard

fwyzard commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

ignore tests-rejected with external-failure

Comment thread DataFormats/TICL/interface/AssociationMap.h Outdated
@fwyzard

fwyzard commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Please add a DataFormats/TICL/README.md file that explains how to use the association map, and clearly states what the behaviour is in terms of internal sizes etc.

@cmsbuild

Copy link
Copy Markdown
Contributor

+code-checks

Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-49995/50707

@cmsbuild

Copy link
Copy Markdown
Contributor

Pull request #49995 was updated. @Moanwar, @cmsbuild, @fwyzard, @jfernan2, @makortel, @mandrenguyen, @srimanob can you please check and sign again.

@fwyzard

fwyzard commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

please test

@cmsbuild

Copy link
Copy Markdown
Contributor

+1

Size: This PR adds an extra 28KB to repository
Summary: https://cmssdt.cern.ch/SDT/jenkins-artifacts/pull-request-integration/PR-9aee20/55522/summary.html
COMMIT: 606e92c
CMSSW: CMSSW_20_1_X_2026-08-24-1100/el9_amd64_gcc14
Additional Tests: GPU,AMD_MI300X,AMD_W7900,NVIDIA_H100,NVIDIA_L40S,NVIDIA_T4
User test area: For local testing, you can use /cvmfs/cms-ci.cern.ch/week0/cms-sw/cmssw/49995/55522/install.sh to create a dev area with all the needed externals and cmssw changes.

DAS Queries: The DAS query tests failed, see the summary page for details.

Comparison Summary

Summary:

  • You potentially added 4 lines to the logs
  • Reco comparison results: 0 differences found in the comparisons
  • DQMHistoTests: Total files compared: 45
  • DQMHistoTests: Total histograms compared: 3592269
  • DQMHistoTests: Total failures: 0
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 3592251
  • DQMHistoTests: Total skipped: 18
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 44 files compared)
  • Checked 195 log files, 163 edm output root files, 45 DQM output files
  • TriggerResults: no differences found

AMD_MI300X Comparison Summary

Summary:

  • No significant changes to the logs found
  • Reco comparison results: 83 differences found in the comparisons
  • DQMHistoTests: Total files compared: 7
  • DQMHistoTests: Total histograms compared: 173739
  • DQMHistoTests: Total failures: 8888
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 164851
  • DQMHistoTests: Total skipped: 0
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 6 files compared)
  • Checked 25 log files, 20 edm output root files, 7 DQM output files
  • TriggerResults: no differences found

AMD_W7900 Comparison Summary

Summary:

  • No significant changes to the logs found
  • Reco comparison results: 73 differences found in the comparisons
  • DQMHistoTests: Total files compared: 7
  • DQMHistoTests: Total histograms compared: 173739
  • DQMHistoTests: Total failures: 7800
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 165939
  • DQMHistoTests: Total skipped: 0
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 6 files compared)
  • Checked 25 log files, 20 edm output root files, 7 DQM output files
  • TriggerResults: no differences found

NVIDIA_H100 Comparison Summary

Summary:

  • No significant changes to the logs found
  • Reco comparison results: 114 differences found in the comparisons
  • DQMHistoTests: Total files compared: 7
  • DQMHistoTests: Total histograms compared: 173739
  • DQMHistoTests: Total failures: 9486
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 164253
  • DQMHistoTests: Total skipped: 0
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 6 files compared)
  • Checked 25 log files, 20 edm output root files, 7 DQM output files
  • TriggerResults: no differences found

NVIDIA_L40S Comparison Summary

Summary:

  • No significant changes to the logs found
  • Reco comparison results: 111 differences found in the comparisons
  • DQMHistoTests: Total files compared: 7
  • DQMHistoTests: Total histograms compared: 173739
  • DQMHistoTests: Total failures: 9364
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 164375
  • DQMHistoTests: Total skipped: 0
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 6 files compared)
  • Checked 25 log files, 20 edm output root files, 7 DQM output files
  • TriggerResults: no differences found

NVIDIA_T4 Comparison Summary

Summary:

  • No significant changes to the logs found
  • Reco comparison results: 112 differences found in the comparisons
  • DQMHistoTests: Total files compared: 7
  • DQMHistoTests: Total histograms compared: 173739
  • DQMHistoTests: Total failures: 8570
  • DQMHistoTests: Total nulls: 0
  • DQMHistoTests: Total successes: 165169
  • DQMHistoTests: Total skipped: 0
  • DQMHistoTests: Total Missing objects: 0
  • DQMHistoSizes: Histogram memory added: 0.0 KiB( 6 files compared)
  • Checked 25 log files, 20 edm output root files, 7 DQM output files
  • TriggerResults: no differences found

Max Memory Comparisons exceeding threshold NVIDIA_L40S

@cms-sw/core-l2 , I found 1 workflow step(s) with memory usage exceeding the error threshold:

Expand to see workflows ...
  • Error: Workflow 37634.7503_TTbar_14TeV+Run4D127_HLTHeterogeneousValid step2 max memory diff 39.2 exceeds +/- 30.0 MiB

@fwyzard fwyzard left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor changes to the documentation can be done in a follow up PR.

PortableCollection<Device, ticl::AssociationMap<>> map(queue, nkeys, nvalues);
```

## Filling the map

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you clarify that filling can only be done on the device ?


Filling is done with `ticl::associator::fill`, declared in `interface/FillAssociator.h`.
The fill happens all in one go, so all the data to save inside the map should be available
when calling `fill`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
when calling `fill`.
when calling `fill()`.

- `keys.size() == values.size()` must be `<= nvalues` (the capacity passed at construction).
- `fill` computes, per key, how many values map to it, turns those counts into prefix-sum
offsets (via a multi-block prefix scan), stores them in the `offsets` block, and scatters each value into its key's slice of the `content` block.
- The relative order of values within a single key's bucket is **not guaranteed** to match the input order, since the scatter happens in parallel across threads.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not for this PR

Just something that came to mind and wanted to jot down lest I forget.

How about running a post-insert pass to sort them (if they are sortable) ?

This could help improve the GPU-GPU reproducibility across multiple jobs as well as the CPU-GPU reproducibility.

```

### Note
For querying the size of the map prefer the `keys` and `size` view methods rather than the native SoA's `metadata().size()`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
For querying the size of the map prefer the `keys` and `size` view methods rather than the native SoA's `metadata().size()`.
For querying the size of the map prefer the `keys()` and `size()` view methods rather than the native SoA's `metadata().size()`.

Maybe explain why ?

@fwyzard

fwyzard commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

+heterogeneous

Minor updates to the documentation can be done here or in a follow up.

@Moanwar

Moanwar commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

+1

@cmsbuild

Copy link
Copy Markdown
Contributor

This pull request is fully signed and it will be integrated in one of the next master IBs (tests are also fine). This pull request will now be reviewed by the release team before it's merged. @mandrenguyen, @sextonkennedy, @ftenchini (and backports should be raised in the release meeting by the corresponding L2)

@mandrenguyen

Copy link
Copy Markdown
Contributor

+1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants